﻿using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Configuration;
using Alexim.BL;
using Alexim.Model;
using Esav.ExceptionManagement;

namespace RelateImageDocALS
{
    public class RelateImageMaster
    {
        ImgMasterBL objImgMasBL = new ImgMasterBL();
        ImgMasterM objImgMasM = new ImgMasterM();
        SendMail objSendMail = new SendMail();

        protected internal String _separator;
        public String separator
        {
            get { return _separator; }
            set { _separator = value; }
        }

        protected internal String _pathDocumentsMas;
        public String pathDocumentsMas
        {
            get { return _pathDocumentsMas; }
            set { _pathDocumentsMas = value; }
        }

        protected internal String _pathDocumentsRead;
        public String pathDocumentsRead
        {
            get { return _pathDocumentsRead; }
            set { _pathDocumentsRead = value; }
        }

        protected internal String _serverSMTP;
        public String serverSMTP
        {
            get { return _serverSMTP; }
            set { _serverSMTP = value; }
        }

        protected internal String _userSMTP;
        public String userSMTP
        {
            get { return _userSMTP; }
            set { _userSMTP = value; }
        }

        protected internal String _passwordSMTP;
        public String passwordSMTP
        {
            get { return _passwordSMTP; }
            set { _passwordSMTP = value; }
        }

        protected internal String _fromMail;
        public String fromMail
        {
            get { return _fromMail; }
            set { _fromMail = value; }
        }

        protected internal String _toMailSystems;
        public String toMailSystems
        {
            get { return _toMailSystems; }
            set { _toMailSystems = value; }
        }

        private String _pathDocImgRelMas_NoProcesados;
        public String pathDocImgRelMas_NoProcesados
        {
            get { return _pathDocImgRelMas_NoProcesados; }
            set { _pathDocImgRelMas_NoProcesados = value; }
        }


        public void DocumentRelated()
        {
            String[] rutaArchivosArray;
            FileInfo archivoInfo;

            this._separator = ConfigurationSettings.AppSettings["Separador"].ToString();
            this._pathDocumentsMas = ConfigurationSettings.AppSettings["pathDocImgRelMas"].ToString();
            this._pathDocumentsRead = ConfigurationSettings.AppSettings["pathDocReadImgMas"].ToString();
            this._serverSMTP = ConfigurationSettings.AppSettings["serverSMTP"].ToString();
            this._userSMTP = ConfigurationSettings.AppSettings["userSMTP"].ToString();
            this._passwordSMTP = ConfigurationSettings.AppSettings["passwordSMTP"].ToString();
            this._fromMail = ConfigurationSettings.AppSettings["fromMail"].ToString();
            this._toMailSystems = ConfigurationSettings.AppSettings["toMailSystems"].ToString();
            this._pathDocImgRelMas_NoProcesados = ConfigurationSettings.AppSettings["pathDocImgRelMas_NoProcesados"].ToString();

            rutaArchivosArray = Directory.GetFiles(pathDocumentsRead, "*.*");

            foreach (String rutaArchivo in rutaArchivosArray)
            {
                String consigneeName = String.Empty;
                String listMailsCustomerService = String.Empty;
                String subject = String.Empty;
                String body = String.Empty;
                String extension = String.Empty;
                String nombreArchivo = String.Empty;
                String masterNo = String.Empty;
                String nombreArchivoSinExtension = String.Empty;
                String nuevaRuta = String.Empty;
                String nombreFolder = String.Empty;
                Int32 num = 0;
                Int32 groupID = 0;

                archivoInfo = new FileInfo(rutaArchivo);
                extension = archivoInfo.Extension;
                nombreArchivo = archivoInfo.Name;
                nombreArchivoSinExtension = archivoInfo.Name.Replace(extension, String.Empty);

                try
                {
                    if (nombreArchivo.Contains(separator))
                    {
                        masterNo = nombreArchivo.Substring(0, nombreArchivo.IndexOf(separator));
                    }
                    else
                    {
                        objImgMasM.masterNo = nombreArchivoSinExtension;
                        objImgMasM.extension = extension;
                        masterNo = nombreArchivoSinExtension;
                        nombreArchivo = objImgMasBL.getNewFileName(objImgMasM);
                    }

                    objImgMasM.masterNo = masterNo;
                    objImgMasM.fileName = nombreArchivo;
                    num = objImgMasBL.saveImageMaster(objImgMasM);

                    if (num > 0)
                    {
                        String[] arrayNameGroupID;
                        arrayNameGroupID = objImgMasBL.getConsigneeMaster(objImgMasM).Split(',');
                        consigneeName = arrayNameGroupID[0];
                        groupID = Int32.Parse(arrayNameGroupID[1]);
                        objImgMasM.groupID = groupID;
                        listMailsCustomerService = objImgMasBL.getEmailAddressCustomerService(objImgMasM);
                        nuevaRuta = pathDocumentsMas + @"\" + nombreArchivo;
                        if (File.Exists(nuevaRuta))
                        {
                            archivoInfo.CopyTo(nuevaRuta, true);
                            archivoInfo.Delete();
                            body = "Se ha actualizado la imagen " + nombreArchivo + " a la master " + masterNo;
                        }
                        else
                        {
                            archivoInfo.MoveTo(nuevaRuta);
                            body = "Se ha relacionado la imagen " + nombreArchivo + " a la master " + masterNo;
                        }
                        subject = "Imagen Master " + masterNo + " - " + consigneeName.ToUpper().Trim();
                        objSendMail.EnviarMail(listMailsCustomerService, fromMail, subject, body, serverSMTP, userSMTP, passwordSMTP);
                    }
                    else
                    {
                        nuevaRuta = pathDocImgRelMas_NoProcesados + @"\" + nombreArchivo;
                        if (File.Exists(nuevaRuta))
                        {
                            archivoInfo.CopyTo(nuevaRuta, true);
                            archivoInfo.Delete();
                        }
                        else
                        {
                            archivoInfo.MoveTo(nuevaRuta);
                        }
                        body = "La imagen " + nombreArchivo + " no se pudo relacionar con la master " + masterNo;
                        subject = "Imagen Master " + masterNo;
                        objSendMail.EnviarMail(toMailSystems, fromMail, subject, body, serverSMTP, userSMTP, passwordSMTP);
                    }
                }
                catch (Exception ex)
                {
                    ExceptionManager.Publish(ex);
                    throw ex;
                }

            }

        }

    }
}
